JZ45 扑克牌顺子
面试出了原题,太紧张居然不知道怎么搞了,,,,
https://www.nowcoder.com/practice/762836f4d43d43ca9deb273b3de8e1f4
第一次解:
这题有两个核心条件 1、除了 0 没有重复文件 2、max - min < 5 (因为数组最大长度才 5)
public class Solution {
public boolean IsContinuous(int [] numbers) {
if(numbers.length != 5) return false;
int min = 14;
int max = -1;
int flag = 0;
for(int i = 0; i < numbers.length; i++) {
int number = numbers[i];
// 健壮性判断
if(number < 0 || number > 13) return false;
if(number == 0) continue;
// 如果第 number 已经为 1 则表示当前已经存在这个值了
if(((flag >> number) & 1) == 1) return false;
// 令 flag 第 number 位为 1
flag |= (1 << number);
// 分别找最大值最小值
if(number > max) max = number;
if(number < min) min = number;
if(max - min >= 5) return false;
}
return true;
}
}
总结:以后遇到判断是否重复就可以使用位操作,遇到比对是否连续就可以比对差值